<!DOCTYPE html>


<html lang="en">
  

    <head>
      <meta charset="utf-8" />
        
      <meta name="description" content="時光的个人博客" />
      
      <meta
        name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1"
      />
	  <meta name="referrer" content="no-referrer" />

      <title> 時光</title>
  <meta name="generator" content="hexo-theme-ayer">
      
      <link rel="shortcut icon" href="/favicon.ico" />
       
<link rel="stylesheet" href="/dist/main.css">

      
<link rel="stylesheet" href="/css/fonts/remixicon.css">

      
<link rel="stylesheet" href="/css/custom.css">
 
      <script src="https://cdn.staticfile.org/pace/1.2.4/pace.min.js"></script>
       
 

      <link
        rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/@sweetalert2/theme-bulma@5.0.1/bulma.min.css"
      />
      <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js"></script>

      <!-- mermaid -->
      
      <style>
        .swal2-styled.swal2-confirm {
          font-size: 1.6rem;
        }
      </style>
    <link rel="alternate" href="/atom.xml" title="時光" type="application/atom+xml">
</head>
  </html>
</html>


<body>
  <div id="app">
    
      
    <main class="content on">
      
<section class="cover">
    
      
      <a class="forkMe" href="https://github.com/Shen-Yu/hexo-theme-ayer"
        target="_blank"><img width="149" height="149" src="/images/forkme.png"
          class="attachment-full size-full" alt="Fork me on GitHub" data-recalc-dims="1"></a>
    
  <div class="cover-frame">
    <div class="bg-box">
      <img src="/images/cover1.jpg" alt="image frame" />
    </div>
    <div class="cover-inner text-center text-white">
      <h1><a href="/">時光</a></h1>
      <div id="subtitle-box">
        
        <span id="subtitle"></span>
        
      </div>
      <div>
        
      </div>
    </div>
  </div>
  <div class="cover-learn-more">
    <a href="javascript:void(0)" class="anchor"><i class="ri-arrow-down-line"></i></a>
  </div>
</section>



<script src="https://cdn.staticfile.org/typed.js/2.0.12/typed.min.js"></script>


<!-- Subtitle -->

  <script>
    try {
      var typed = new Typed("#subtitle", {
        strings: ['面朝大海，春暖花开', '愿你一生努力，一生被爱', '想要的都拥有，得不到的都释怀'],
        startDelay: 0,
        typeSpeed: 200,
        loop: true,
        backSpeed: 100,
        showCursor: true
      });
    } catch (err) {
      console.log(err)
    }
  </script>
  
<div id="main">
  <section class="outer">
  
  
  

<div class="notice" style="margin-top:50px">
    <i class="ri-heart-fill"></i>
    <div class="notice-content" id="broad"></div>
</div>
<script type="text/javascript">
    fetch('https://v1.hitokoto.cn')
        .then(response => response.json())
        .then(data => {
            document.getElementById("broad").innerHTML = data.hitokoto;
        })
        .catch(console.error)
</script>

<style>
    .notice {
        padding: 20px;
        border: 1px dashed #e6e6e6;
        color: #969696;
        position: relative;
        display: inline-block;
        width: 100%;
        background: #fbfbfb50;
        border-radius: 10px;
    }

    .notice i {
        float: left;
        color: #999;
        font-size: 16px;
        padding-right: 10px;
        vertical-align: middle;
        margin-top: -2px;
    }

    .notice-content {
        display: initial;
        vertical-align: middle;
    }
</style>
  
  <article class="articles">
    
    
    
    
    <article
  id="post-利用CloudFlare获取无限邮箱"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/22/%E5%88%A9%E7%94%A8CloudFlare%E8%8E%B7%E5%8F%96%E6%97%A0%E9%99%90%E9%82%AE%E7%AE%B1/"
    >利用CloudFlare获取无限邮箱</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/22/%E5%88%A9%E7%94%A8CloudFlare%E8%8E%B7%E5%8F%96%E6%97%A0%E9%99%90%E9%82%AE%E7%AE%B1/" class="article-date">
  <time datetime="2023-12-22T08:37:38.029Z" itemprop="datePublished">2023-12-22</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%B7%A5%E5%85%B7%E7%AE%B1/">工具箱</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="1、创建自定义地址"><a href="#1、创建自定义地址" class="headerlink" title="1、创建自定义地址"></a>1、创建自定义地址</h1><p>点击开始使用</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222163925955-349664827.png" alt="image-20231222163927534"></p>
<p>填写自定义地址及目标地址，目标地址即最终你要用来接收邮件的邮箱</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222164730376-1457644879.png" alt="image-20231222164726908"></p>
<h1 id="2、验证目标地址"><a href="#2、验证目标地址" class="headerlink" title="2、验证目标地址"></a>2、验证目标地址</h1><p>添加你希望转发到的邮箱地址（可以是QQ邮箱、163.com等国内邮箱）</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222164913147-624826037.png" alt="image-20231222164904820"></p>
<p>点击添加记录并启用</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222165037766-1456785085.png" alt="image-20231222165039417"></p>
<p>启用后如下所示</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222165131481-1823263836.png" alt="image-20231222165133087"></p>
<p>此时就可以用自定义邮箱地址接收邮件，邮件最终会发送到你配置的目标邮箱上</p>
<h1 id="3、使用"><a href="#3、使用" class="headerlink" title="3、使用"></a>3、使用</h1><p>我们模拟给自定义邮箱发送一封邮件</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222165719777-94041044.png" alt="image-20231222165721332"></p>
<p>使用配置的目标邮箱查看收到的邮件，此邮件会显示代发详情</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222165908696-116199071.png" alt="image-20231222165910371"></p>
<h1 id="4、启用Catch-all地址"><a href="#4、启用Catch-all地址" class="headerlink" title="4、启用Catch-all地址"></a>4、启用Catch-all地址</h1><p>启用Catch-all地址，点击编辑</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222171315150-756936210.png" alt="image-20231222171316544"></p>
<p>操作选择发送到电子邮件，填写目标邮件地址，保存即可</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231222171422622-757885814.png" alt="image-20231222171419233"></p>
<p>配置好以后，所有<code>xxxx@your_domain</code>的邮件都转发到你配置的目标邮件地址上了</p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/CloudFlare/" rel="tag">CloudFlare</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-一键部署谷歌Gemini聊天机器人"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/19/%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2%E8%B0%B7%E6%AD%8CGemini%E8%81%8A%E5%A4%A9%E6%9C%BA%E5%99%A8%E4%BA%BA/"
    >一键部署谷歌Gemini聊天机器人</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/19/%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2%E8%B0%B7%E6%AD%8CGemini%E8%81%8A%E5%A4%A9%E6%9C%BA%E5%99%A8%E4%BA%BA/" class="article-date">
  <time datetime="2023-12-19T14:32:12.000Z" itemprop="datePublished">2023-12-19</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、项目介绍"><a href="#一、项目介绍" class="headerlink" title="一、项目介绍"></a>一、项目介绍</h1><p>谷歌正式开放了 <code>API</code>，只要你有一个Google账号和海外 IP ，就可免费申请使用 <code>Gemini Pro&amp;Gemini Pro Vision</code>，相关功能可媲美GPT4！</p>
<h1 id="二、安装步骤"><a href="#二、安装步骤" class="headerlink" title="二、安装步骤"></a>二、安装步骤</h1><h2 id="1、申请API-Key"><a href="#1、申请API-Key" class="headerlink" title="1、申请API Key"></a>1、申请API Key</h2><p> <a target="_blank" rel="noopener" href="https://makersuite.google.com/app/apikey">链接直达</a>：<a target="_blank" rel="noopener" href="https://makersuite.google.com/app/apikey">https://makersuite.google.com/app/apikey</a></p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219223641453-633930855.png" alt="image-20231219223633528"></p>
<h2 id="2、搭建UI服务"><a href="#2、搭建UI服务" class="headerlink" title="2、搭建UI服务"></a>2、搭建UI服务</h2><p><a target="_blank" rel="noopener" href="https://github.com/babaohuang/GeminiProChat">Github地址</a>：<a target="_blank" rel="noopener" href="https://github.com/babaohuang/GeminiProChat">https://github.com/babaohuang/GeminiProChat</a></p>
<p>Live demo: <a target="_blank" rel="noopener" href="https://www.geminiprochat.com/">Gemini Pro Chat</a></p>
<h3 id="2-1-Vercel-一键部署"><a href="#2-1-Vercel-一键部署" class="headerlink" title="2.1 Vercel 一键部署"></a>2.1 Vercel 一键部署</h3><p><a target="_blank" rel="noopener" href="https://vercel.com/new/clone?repository-url=https://github.com/babaohuang/GeminiProChat">点击链接</a>进行一键部署，登录后点击创建仓库，或者将项目fork到自己仓库导入也可以</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219224715852-1110933893.png" alt="image-20231219224711074"></p>
<p>填写一下环境变量 <code>GEMINI_API_KEY</code> ，值是刚才创建的APi Key</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219225152556-662355716.png" alt="image-20231219225144914"></p>
<p>填写好环境变量后，点击Deploy进行部署，稍等片刻后撒花即部署成功</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219225249461-570391343.png" alt="image-20231219225248773"></p>
<p>点击 <code>Continue to Dashboard</code> 进入面板</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219225418286-273295325.png" alt="image-20231219225406768"></p>
<p>Vercel平台为我们提供了一个免费的域名点击 <code>Domains</code>下的链接可以直接进行体验</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219225648652-1144692072.png" alt="image-20231219225636964"></p>
<p>或者点击 <code>Deployment</code>，可以看到Domains下一共有三个域名可以使用</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219225914484-1354896942.png" alt="image-20231219225909784"></p>
<p>效果如下</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219225822571-1334138606.png" alt="image-20231219225810991"></p>
<p>如何你想绑定自己的域名，可以到 Settings &#x3D;&gt;  domains 添加自己的域名</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219230212970-381761579.png" alt="image-20231219230209999"></p>
<p>需要在添加一条A记录</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219230544043-1741018652.png" alt="image-20231219230540434"></p>
<p>绑定自己的域名</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219230513542-547715280.png" alt="image-20231219230512898"></p>
<p>稍等片刻后即可使用</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231219230621045-358549246.png" alt="image-20231219230620542"></p>
<h3 id="2-2-Docker-一键部署"><a href="#2-2-Docker-一键部署" class="headerlink" title="2.2 Docker 一键部署"></a>2.2 Docker 一键部署</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run --name geminiprochat \</span><br><span class="line">--restart always \</span><br><span class="line">-p 3030:3000 \</span><br><span class="line">-itd \</span><br><span class="line">-e GEMINI_API_KEY=xxx \</span><br><span class="line">howie6879/geminiprochat:v0.1.0</span><br></pre></td></tr></table></figure>

<p>修改环境变量 <code>GEMINI_API_KEY</code> 为你申请的API Key</p>
<p>确保 3030端口可用，或者可以映射其他端口</p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/AI/" rel="tag">AI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker/" rel="tag">Docker</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Gemini/" rel="tag">Gemini</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Vercel/" rel="tag">Vercel</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-ufw简单使用"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/17/ufw%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8/"
    >ufw简单使用</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/17/ufw%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8/" class="article-date">
  <time datetime="2023-12-17T07:11:54.104Z" itemprop="datePublished">2023-12-17</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%B7%A5%E5%85%B7%E7%AE%B1/">工具箱</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <p>1、更新软件包</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt update</span><br></pre></td></tr></table></figure>

<p>2、安装ufw</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install ufw</span><br></pre></td></tr></table></figure>

<p>3、启动ufw</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 默认情况下，它将允许常见的服务端口（如 SSH、HTTP、HTTPS）通过，而其他所有端口将被拒绝</span></span><br><span class="line">sudo ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure>

<p>4、检测防火墙状态</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo ufw status</span><br></pre></td></tr></table></figure>

<p>5、放行指定端口</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo ufw allow &lt;端口号&gt;</span><br></pre></td></tr></table></figure>

 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/ufw/" rel="tag">ufw</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-1panel搭建LNMP环境"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/17/1panel%E6%90%AD%E5%BB%BALNMP%E7%8E%AF%E5%A2%83/"
    >1panel搭建LNMP环境</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/17/1panel%E6%90%AD%E5%BB%BALNMP%E7%8E%AF%E5%A2%83/" class="article-date">
  <time datetime="2023-12-17T06:55:15.646Z" itemprop="datePublished">2023-12-17</time>
</a>    
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <p>一、Nginx</p>
<p>应用商店 -&gt; OpenResty</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217150037548-194159260.png" alt="image-20231217150031653"></p>
<p>设置端口 </p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217150117446-829656776.png" alt="image-20231217150101064"></p>
<p>二、Mysql</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217152037410-1390420483.png" alt="image-20231217152031576"></p>
<p>三、PHP</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217152550142-2057081307.png" alt="image-20231217152534471"></p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/1panel/" rel="tag">1panel</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker/" rel="tag">Docker</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E9%9D%A2%E6%9D%BF/" rel="tag">面板</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-Docker部署服务器运维管理面板1Panel"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/17/Docker%E9%83%A8%E7%BD%B2%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%90%E7%BB%B4%E7%AE%A1%E7%90%86%E9%9D%A2%E6%9D%BF1Panel/"
    >Docker部署服务器运维管理面板1Panel</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/17/Docker%E9%83%A8%E7%BD%B2%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%90%E7%BB%B4%E7%AE%A1%E7%90%86%E9%9D%A2%E6%9D%BF1Panel/" class="article-date">
  <time datetime="2023-12-17T04:12:54.503Z" itemprop="datePublished">2023-12-17</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、项目介绍"><a href="#一、项目介绍" class="headerlink" title="一、项目介绍"></a>一、项目介绍</h1><p>1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括：</p>
<ul>
<li><strong>快速建站</strong>：深度集成 Wordpress 和 <a target="_blank" rel="noopener" href="https://github.com/halo-dev/halo/">Halo</a>，域名绑定、SSL 证书配置等一键搞定；</li>
<li><strong>高效管理</strong>：通过 Web 端轻松管理 Linux 服务器，包括主机监控、文件管理、数据库管理、容器管理等；</li>
<li><strong>安全可靠</strong>：基于容器来管理和部署应用，最小漏洞暴露面，提供防火墙和日志审计等功能；</li>
<li><strong>一键备份</strong>：支持一键备份和恢复，备份数据到各类云端存储，永不丢失；</li>
<li><strong>应用商店</strong>：精选各类高质量开源工具和应用软件，助力您轻松安装和升级。</li>
</ul>
<p>官网地址：<a target="_blank" rel="noopener" href="https://1panel.cn/">https://1panel.cn/</a></p>
<p>Github: <a target="_blank" rel="noopener" href="https://github.com/1Panel-dev/1Panel">https://github.com/1Panel-dev/1Panel</a></p>
<p>官方文档：<a target="_blank" rel="noopener" href="https://1panel.cn/docs/">https://1panel.cn/docs/</a></p>
<p>UI展示</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217112957650-691345650.png" alt="image-20231217112945259"></p>
<p><strong>在线体验</strong></p>
<ul>
<li>环境地址：<a target="_blank" rel="noopener" href="https://demo.1panel.cn/">https://demo.1panel.cn/</a></li>
<li>用户名：demo</li>
<li>密码：1panel</li>
</ul>
<h2 id="二、安装步骤"><a href="#二、安装步骤" class="headerlink" title="二、安装步骤"></a>二、安装步骤</h2><p>执行一键安装脚本</p>
<p><strong>RedHat &#x2F; CentOS</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sh quick_start.sh</span><br></pre></td></tr></table></figure>

<p><strong>Ubuntu</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sudo bash quick_start.sh</span><br></pre></td></tr></table></figure>

<p><strong>Debian</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; bash quick_start.sh</span><br></pre></td></tr></table></figure>

<p>按照按照导引操作即可</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217120430103-1306063556.png" alt="image-20231217120428273"></p>
<p>安装成功后，控制台会打印面板访问信息，可通过浏览器访问 1Panel：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://目标服务器 IP 地址:目标端口/安全入口</span><br></pre></td></tr></table></figure>

<ul>
<li><strong>如果使用的是云服务器，请至安全组开放目标端口。</strong></li>
<li><strong>ssh 登录 1Panel 服务器后，执行 1pctl user-info 命令可获取安全入口（entrance）</strong></li>
</ul>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217143738545-18450991.png" alt="image-20231217143737457"></p>
<p>可使用 <a target="_blank" rel="noopener" href="https://1panel.cn/docs/installation/cli/">1pctl</a> 命令行工具来维护 1Panel</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217143818044-537723358.png" alt="image-20231217143817582"></p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/1Panel/" rel="tag">1Panel</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker/" rel="tag">Docker</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E9%9D%A2%E6%9D%BF/" rel="tag">面板</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-IPTV电视直播源搜索引擎"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/17/IPTV%E7%94%B5%E8%A7%86%E7%9B%B4%E6%92%AD%E6%BA%90%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/"
    >IPTV电视直播源搜索引擎推荐</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/17/IPTV%E7%94%B5%E8%A7%86%E7%9B%B4%E6%92%AD%E6%BA%90%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/" class="article-date">
  <time datetime="2023-12-17T02:24:25.478Z" itemprop="datePublished">2023-12-17</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%B7%A5%E5%85%B7%E7%AE%B1/">工具箱</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、工具介绍"><a href="#一、工具介绍" class="headerlink" title="一、工具介绍"></a>一、工具介绍</h1><p>可以聚合搜索个平台直播源</p>
<p>地址：<a target="_blank" rel="noopener" href="https://www.foodieguide.com/iptvsearch/">https://www.foodieguide.com/iptvsearch/</a></p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217101716762-411465724.png" alt="image-20231217101714726"></p>
<h1 id="二、使用说明"><a href="#二、使用说明" class="headerlink" title="二、使用说明"></a>二、使用说明</h1><p>以 CCTV13 新闻频道为例，搜索 CCTV13 新闻，凭感觉找一下，复制链接地址</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217102014129-1408157893.png" alt="image-20231217102008527"></p>
<p>打开PotPlayer &#x3D;&gt; 打开 &#x3D;&gt; 打开链接 </p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217102225331-1469596908.png" alt="image-20231217102213631"></p>
<p>粘贴复制的链接地址，点击确定后会自动解析并播放</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217102349289-913865895.png" alt="image-20231217102337387"></p>
<p>效果如下</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217102015111-948307728.png" alt="image-20231217102002046"></p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-Docker部署在线音乐服务Melody"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/17/Docker%E9%83%A8%E7%BD%B2%E5%9C%A8%E7%BA%BF%E9%9F%B3%E4%B9%90%E6%9C%8D%E5%8A%A1Melody/"
    >Docker部署在线音乐服务Melody</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/17/Docker%E9%83%A8%E7%BD%B2%E5%9C%A8%E7%BA%BF%E9%9F%B3%E4%B9%90%E6%9C%8D%E5%8A%A1Melody/" class="article-date">
  <time datetime="2023-12-17T01:50:02.000Z" itemprop="datePublished">2023-12-17</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、项目介绍"><a href="#一、项目介绍" class="headerlink" title="一、项目介绍"></a>一、项目介绍</h1><p><strong>主要功能</strong></p>
<ul>
<li>支持在各大音乐和视频网站检索歌曲。目前支持 咪咕、网易云、QQ 音乐、酷狗、bilibili、抖音等站点。详情可以在 <a target="_blank" rel="noopener" href="https://github.com/foamzou/media-get#%E6%94%AF%E6%8C%81%E7%9A%84%E7%BD%91%E7%AB%99">media-get</a> 项目中查看</li>
<li>支持一键下载到本地，一键上传到云盘</li>
<li>用链接搜索歌曲（例如使用 b站或抖音的视频链接进行搜索，可以将对应的音频自动上传到音乐云盘）</li>
<li>一键“解锁”无法播放的歌曲（一键检测变灰的歌曲，自动从公共资源搜索最佳资源，自动上传到云盘，自动匹配歌曲信息。代替繁琐的人工操作，实现可播放）（实验性功能，目前仅支持网易云）</li>
<li>PC 端、移动端适配良好（支持 PWA）</li>
<li>部署简单，支持 docker</li>
</ul>
<p><strong>Github地址</strong>：<a target="_blank" rel="noopener" href="https://github.com/foamzou/melody">https://github.com/foamzou/melody</a></p>
<h1 id="二、安装步骤"><a href="#二、安装步骤" class="headerlink" title="二、安装步骤"></a>二、安装步骤</h1><h2 id="2-1-创建目录"><a href="#2-1-创建目录" class="headerlink" title="2.1 创建目录"></a>2.1 创建目录</h2><p>在你的宿主机创建一个目录，例如： <code>/root/docker_data/melody-profile</code></p>
<h2 id="2-2-创建镜像"><a href="#2-2-创建镜像" class="headerlink" title="2.2 创建镜像"></a>2.2 创建镜像</h2><p>这里我将默认5566端口映射到了自定义的6605端口</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d -p 6606:5566  -v /root/docker_data/melody-profile:/app/backend/.profile foamzou/melody:latest</span><br></pre></td></tr></table></figure>

<p>docker部署成功后，访问ip及 端口即可</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231217104120241-126299091.png" alt="image-20231217104119031"></p>
<p>部署到国外的VPS无法使用，必须用国内IP</p>
<h2 id="2-3-后续更新"><a href="#2-3-后续更新" class="headerlink" title="2.3 后续更新"></a>2.3 后续更新</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">docker pull docker.io/foamzou/melody:latest</span><br><span class="line">docker <span class="built_in">kill</span> &lt;CONTAINER ID&gt;</span><br><span class="line">docker run -d -p 5566:5566  -v ~/melody-profile:/app/backend/.profile foamzou/melody:latest</span><br></pre></td></tr></table></figure>



<h3 id=""><a href="#" class="headerlink" title=""></a></h3> 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker/" rel="tag">Docker</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Melody/" rel="tag">Melody</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-Docker部署chatgpt-on-wechat"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/16/Docker%E9%83%A8%E7%BD%B2chatgpt-on-wechat/"
    >Docker部署chatgpt-on-wechat</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/16/Docker%E9%83%A8%E7%BD%B2chatgpt-on-wechat/" class="article-date">
  <time datetime="2023-12-16T09:54:08.942Z" itemprop="datePublished">2023-12-16</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、项目介绍"><a href="#一、项目介绍" class="headerlink" title="一、项目介绍"></a>一、项目介绍</h1><p><strong>chatgpt-on-wechat</strong> (cow) 项目是使用 ChatGPT 搭建的智能聊天机器人，在GPT3.5&#x2F;4.0 API 及 itchat框架的基础上实现，支持个人微信、公众号、企业微信部署，能生成文本、语音和图片，访问操作系统和互联网。</p>
<p>最新版本支持的功能如下：</p>
<ul>
<li><strong>多端部署：</strong> 可接入 个人微信、微信公众号、企业微信应用</li>
<li><strong>基础对话：</strong> 私聊及群聊的消息智能回复，支持多轮会话上下文记忆，支持 GPT-3, GPT-3.5, GPT-4, 文心一言模型</li>
<li><strong>语音识别：</strong> 可识别语音消息，通过文字或语音回复，支持 azure, baidu, google, openai 等多种语音模型</li>
<li><strong>图片生成：</strong> 支持图片生成 和 图生图（如照片修复），可选择 Dell-E, stable diffusion, replicate, Midjourney 模型</li>
<li><strong>丰富插件：</strong> 支持个性化插件扩展，已实现多角色切换、文字冒险、敏感词过滤、聊天记录总结等插件</li>
<li><strong>Tool工具：</strong> 与操作系统和互联网交互，支持最新信息搜索、数学计算、天气和资讯查询、网页总结，基于 <a target="_blank" rel="noopener" href="https://github.com/goldfishh/chatgpt-tool-hub">chatgpt-tool-hub</a> 实现</li>
<li><strong>知识库：</strong> 通过上传知识库文件自定义专属机器人，可作为数字分身、领域知识库、智能客服使用，基于 LinkAI 实现</li>
</ul>
<p><strong>项目地址 (Github)：</strong> <a target="_blank" rel="noopener" href="https://github.com/zhayujie/chatgpt-on-wechat">https://github.com/zhayujie/chatgpt-on-wechat</a></p>
<p><strong>项目地址 (Gitee)：</strong> <a target="_blank" rel="noopener" href="https://gitee.com/zhayujie/chatgpt-on-wechat">https://gitee.com/zhayujie/chatgpt-on-wechat</a></p>
<p><strong>演示：</strong> <a target="_blank" rel="noopener" href="https://github-production-user-asset-6210df.s3.amazonaws.com/26161723/276637295-d5154020-36e3-41db-8706-40ce9f3f1b1e.mp4">视频demo</a></p>
<h1 id="二、安装步骤"><a href="#二、安装步骤" class="headerlink" title="二、安装步骤"></a>二、安装步骤</h1><h2 id="1、-下载-docker-compose-yml-文件"><a href="#1、-下载-docker-compose-yml-文件" class="headerlink" title="1、 下载 docker-compose.yml 文件"></a>1、 下载 <code>docker-compose.yml</code> 文件</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://open-1317903499.cos.ap-guangzhou.myqcloud.com/docker-compose.yml</span><br></pre></td></tr></table></figure>

<h2 id="2、修改docker-compose-yml文件"><a href="#2、修改docker-compose-yml文件" class="headerlink" title="2、修改docker-compose.yml文件"></a>2、修改<code>docker-compose.yml</code>文件</h2><p>需修改如下配置</p>
<p> <code>OPEN_AI_API_KEY</code> ：你的OpenAI API KEY</p>
<p> <code>SINGLE_CHAT_PREFIX </code>:  私聊时文本需要包含该前缀才能触发机器人回复</p>
<p> <code>GROUP_NAME_WHITE_LIST</code> :  开启自动回复的群名称列表</p>
<p>此处我稍微做了一些调整，修改了默认端口，分别映射到自定义端口上</p>
<p>chatgpt-on-wechat 服务默认使用以下端口：</p>
<p>80端口：用于访问 Web 界面，即聊天界面。<br>8000端口：用于与微信服务器进行通信，接收和发送消息。<br>8888端口：用于与 OpenAI GPT-3 API 进行通信，发送用户输入并接收生成的回复。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">version: &#x27;2.0&#x27;</span><br><span class="line">services:</span><br><span class="line">  chatgpt-on-wechat:</span><br><span class="line">    image: zhayujie/chatgpt-on-wechat</span><br><span class="line">    container_name: chatgpt-on-wechat</span><br><span class="line">    security_opt:</span><br><span class="line">      - seccomp:unconfined</span><br><span class="line">    ports:</span><br><span class="line">      - 8801:80</span><br><span class="line">      - 8802:8000</span><br><span class="line">      - 8803:8888</span><br><span class="line">    environment:</span><br><span class="line">      OPEN_AI_API_KEY: &#x27;xxxxxxxxxxxxx&#x27;</span><br><span class="line">      MODEL: &#x27;gpt-3.5-turbo&#x27;</span><br><span class="line">      PROXY: &#x27;&#x27;</span><br><span class="line">      SINGLE_CHAT_PREFIX: &#x27;[&quot;bot&quot;, &quot;@bot&quot;]&#x27;</span><br><span class="line">      SINGLE_CHAT_REPLY_PREFIX: &#x27;&quot;[bot] &quot;&#x27;</span><br><span class="line">      GROUP_CHAT_PREFIX: &#x27;[&quot;@bot&quot;]&#x27;</span><br><span class="line">      GROUP_NAME_WHITE_LIST: &#x27;[&quot;時光gpt测试群&quot;, &quot;ChatGPT测试群&quot;]&#x27;</span><br><span class="line">      IMAGE_CREATE_PREFIX: &#x27;[&quot;画&quot;, &quot;看&quot;, &quot;找&quot;]&#x27;</span><br><span class="line">      CONVERSATION_MAX_TOKENS: 1000</span><br><span class="line">      SPEECH_RECOGNITION: &#x27;False&#x27;</span><br><span class="line">      CHARACTER_DESC: &#x27;你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题，并且可以使用多种语言与人交流。&#x27;</span><br><span class="line">      EXPIRES_IN_SECONDS: 3600</span><br><span class="line">      USE_GLOBAL_PLUGIN_CONFIG: &#x27;True&#x27;</span><br><span class="line">      USE_LINKAI: &#x27;False&#x27;</span><br><span class="line">      LINKAI_API_KEY: &#x27;&#x27;</span><br><span class="line">      LINKAI_APP_CODE: &#x27;&#x27;</span><br><span class="line"></span><br></pre></td></tr></table></figure>



<p>更多环境变量参考以下配置</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  &quot;open_ai_api_key&quot;: &quot;YOUR API KEY&quot;,                          # 填入上面创建的 OpenAI API KEY</span><br><span class="line">  &quot;model&quot;: &quot;gpt-3.5-turbo&quot;,                                   # 模型名称, 支持 gpt-3.5-turbo, gpt-3.5-turbo-16k, gpt-4, wenxin, xunfei</span><br><span class="line">  &quot;proxy&quot;: &quot;&quot;,                                                # 代理客户端的ip和端口，国内环境开启代理的需要填写该项，如 &quot;127.0.0.1:7890&quot;</span><br><span class="line">  &quot;single_chat_prefix&quot;: [&quot;bot&quot;, &quot;@bot&quot;],                      # 私聊时文本需要包含该前缀才能触发机器人回复</span><br><span class="line">  &quot;single_chat_reply_prefix&quot;: &quot;[bot] &quot;,                       # 私聊时自动回复的前缀，用于区分真人</span><br><span class="line">  &quot;group_chat_prefix&quot;: [&quot;@bot&quot;],                              # 群聊时包含该前缀则会触发机器人回复</span><br><span class="line">  &quot;group_name_white_list&quot;: [&quot;ChatGPT测试群&quot;, &quot;ChatGPT测试群2&quot;], # 开启自动回复的群名称列表</span><br><span class="line">  &quot;group_chat_in_one_session&quot;: [&quot;ChatGPT测试群&quot;],              # 支持会话上下文共享的群名称  </span><br><span class="line">  &quot;image_create_prefix&quot;: [&quot;画&quot;, &quot;看&quot;, &quot;找&quot;],                   # 开启图片回复的前缀</span><br><span class="line">  &quot;conversation_max_tokens&quot;: 1000,                            # 支持上下文记忆的最多字符数</span><br><span class="line">  &quot;speech_recognition&quot;: false,                                # 是否开启语音识别</span><br><span class="line">  &quot;group_speech_recognition&quot;: false,                          # 是否开启群组语音识别</span><br><span class="line">  &quot;use_azure_chatgpt&quot;: false,                                 # 是否使用Azure ChatGPT service代替openai ChatGPT service. 当设置为true时需要设置 open_ai_api_base，如 https://xxx.openai.azure.com/</span><br><span class="line">  &quot;azure_deployment_id&quot;: &quot;&quot;,                                  # 采用Azure ChatGPT时，模型部署名称</span><br><span class="line">  &quot;azure_api_version&quot;: &quot;&quot;,                                    # 采用Azure ChatGPT时，API版本</span><br><span class="line">  &quot;character_desc&quot;: &quot;你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题，并且可以使用多种语言与人交流。&quot;,  # 人格描述</span><br><span class="line">  # 订阅消息，公众号和企业微信channel中请填写，当被订阅时会自动回复，可使用特殊占位符。目前支持的占位符有&#123;trigger_prefix&#125;，在程序中它会自动替换成bot的触发词。</span><br><span class="line">  &quot;subscribe_msg&quot;: &quot;感谢您的关注！\n这里是ChatGPT，可以自由对话。\n支持语音对话。\n支持图片输出，画字开头的消息将按要求创作图片。\n支持角色扮演和文字冒险等丰富插件。\n输入&#123;trigger_prefix&#125;#help 查看详细指令。&quot;,</span><br><span class="line">  &quot;use_linkai&quot;: false,                                        # 是否使用LinkAI接口，默认关闭，开启后可国内访问，使用知识库和MJ</span><br><span class="line">  &quot;linkai_api_key&quot;: &quot;&quot;,                                       # LinkAI Api Key</span><br><span class="line">  &quot;linkai_app_code&quot;: &quot;&quot;                                       # LinkAI 应用code</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<h2 id="3、启动容器"><a href="#3、启动容器" class="headerlink" title="3、启动容器"></a>3、启动容器</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose up -d</span><br></pre></td></tr></table></figure>

<p>运行 <code>docker ps</code> 能查看到 NAMES 为 <code>chatgpt-on-wechat</code> 的容器即表示运行成功</p>
<p>最后运行以下命令可查看容器运行日志，扫描日志中的二维码即可完成登录：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker logs -f chatgpt-on-wechat</span><br></pre></td></tr></table></figure>

<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216181255113-1716560990.png" alt="image-20231216181256504"></p>
<h2 id="4、如何使用"><a href="#4、如何使用" class="headerlink" title="4、如何使用"></a>4、如何使用</h2><p>成功运行之后日志中会输出 “Start auto replying”，这表示你用于扫码登录的账号已经变身为机器人了，让你的好友给你发消息 或在群聊@你 都会触发自动回复，效果如下图：</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216180844935-1511805991.png" alt="image-20231216180846189"></p>
<h2 id="5、停止容器"><a href="#5、停止容器" class="headerlink" title="5、停止容器"></a>5、停止容器</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose down</span><br></pre></td></tr></table></figure>

<p>注意：如果修改了 <code>docker-compose.yml</code> 中的配置，需要关闭容器后再重新启动才能生效，只执行 <code>docker restart</code> 是不起作用的。</p>
<h2 id="6、常见问题"><a href="#6、常见问题" class="headerlink" title="6、常见问题"></a>6、常见问题</h2><ol>
<li>如果发送消息没有回复，对于私聊场景确认下消息是否携带了触发词，对应配置 <code>single_chat_prefix</code>，对于群聊场景要确认该群名称是否配置在群组白名单 (<code>group_name_white_list</code>) 中。</li>
<li>如果机器人回复 “我现在有点累了” 或 “我连接不到你的网络” 等，一般是访问openAI接口失败，需查看日志中的具体报错信息来定位，可能是网络不通、openAI账号额度不足、访问频率超限等原因。</li>
<li>可能存在一定账号被限制的风险，建议仅用于技术研究或娱乐，不要过高频率使用。</li>
</ol>
<p>常见问题查看 <a target="_blank" rel="noopener" href="https://github.com/zhayujie/chatgpt-on-wechat/wiki/FAQs">FAQs</a>，或直接与 <a target="_blank" rel="noopener" href="https://link-ai.tech/app/Kv2fXJcH">在线项目小助手</a> 对话。</p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/ChatGPT/" rel="tag">ChatGPT</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker/" rel="tag">Docker</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Wechat/" rel="tag">Wechat</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-搭建Docker可视化面板Portainer"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/16/%E6%90%AD%E5%BB%BADocker%E5%8F%AF%E8%A7%86%E5%8C%96%E9%9D%A2%E6%9D%BFPortainer/"
    >搭建Docker可视化面板Portainer</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/16/%E6%90%AD%E5%BB%BADocker%E5%8F%AF%E8%A7%86%E5%8C%96%E9%9D%A2%E6%9D%BFPortainer/" class="article-date">
  <time datetime="2023-12-16T07:07:11.000Z" itemprop="datePublished">2023-12-16</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、项目介绍"><a href="#一、项目介绍" class="headerlink" title="一、项目介绍"></a>一、项目介绍</h1><p>Portainer是一个非常好用的Docker可视化面板，可以让你轻松地管理你的Docker容器。</p>
<p>官网：<a target="_blank" rel="noopener" href="https://www.portainer.io/">https://www.portainer.io/</a></p>
<h1 id="二、安装步骤"><a href="#二、安装步骤" class="headerlink" title="二、安装步骤"></a>二、安装步骤</h1><h2 id="1、绑定域名"><a href="#1、绑定域名" class="headerlink" title="1、绑定域名"></a>1、绑定域名</h2><p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216151524363-1569838382.png" alt="image-20231216151520990"></p>
<h2 id="2、添加反向代理"><a href="#2、添加反向代理" class="headerlink" title="2、添加反向代理"></a>2、添加反向代理</h2><p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216151611656-1332349703.png" alt="image-20231216151557140"></p>
<h2 id="3、运行一键安装脚本"><a href="#3、运行一键安装脚本" class="headerlink" title="3、运行一键安装脚本"></a>3、运行一键安装脚本</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d -p 8000:8000 -p 6609:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /root/docker_data/portainer/data:/data portainer/portainer-ce:latest</span><br></pre></td></tr></table></figure>

<p>中文版</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run -d \</span><br><span class="line">--name=portainer-zh \</span><br><span class="line">-p 9000:9000 \</span><br><span class="line">-v /var/run/docker.sock:/var/run/docker.sock \</span><br><span class="line">--restart=always \</span><br><span class="line">6053537/portainer-ce</span><br></pre></td></tr></table></figure>



<p>部署成功后输入IP+端口 或者域名即可访问</p>
<p>首次登录需创建账户</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216152337536-847839134.png" alt="image-20231216152324393"></p>
<p>点击 <code>home</code>可预览当前Docker相关信息</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216152538389-1012202429.png" alt="image-20231216152534242"></p>
<p>点击可进入仪表盘</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216152618585-745902910.png" alt="image-20231216152604916"></p>
<p>可继续点击查看容器，镜像等详细信息</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216152756100-1755803965.png" alt="image-20231216152741642"></p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker-Portainer/" rel="tag">Docker Portainer</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
    <article
  id="post-Docker搭建哪吒面板"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h2 itemprop="name">
  <a class="article-title" href="/2023/12/16/Docker%E6%90%AD%E5%BB%BA%E5%93%AA%E5%90%92%E9%9D%A2%E6%9D%BF/"
    >Docker搭建哪吒面板</a> 
</h2>
 

      
    </header>
     
    <div class="article-meta">
      <a href="/2023/12/16/Docker%E6%90%AD%E5%BB%BA%E5%93%AA%E5%90%92%E9%9D%A2%E6%9D%BF/" class="article-date">
  <time datetime="2023-12-16T05:53:36.000Z" itemprop="datePublished">2023-12-16</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
  </div>
   
    </div>
      
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="一、项目介绍"><a href="#一、项目介绍" class="headerlink" title="一、项目介绍"></a>一、项目介绍</h1><p>哪吒官网：<a target="_blank" rel="noopener" href="https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbkJUOWcxWmFvZUxpNzBWLWV6bnNiS05FMTA4Z3xBQ3Jtc0trOXBnMU1kWTNnZWQtcVNuMTF5WXB0RF9SWS1nYUFXRnFXRmxaWE12TFdpSi1XZUtpcVZOSlpYMkotV3dZYTFMa01LWlhWLWdvX2NHZEhIQzVROWxoSXZxdmJzeEZHUmQ4Qlg4Vzh2d2JvbEFmWjNiVQ&q=https://nezha.wiki/guide/dashboard.html&v=N5qcor66byI">https://nezha.wiki/guide/dashboard.html</a></p>
<h1 id="二、部署服务"><a href="#二、部署服务" class="headerlink" title="二、部署服务"></a>二、部署服务</h1><h2 id="1、绑定域名"><a href="#1、绑定域名" class="headerlink" title="1、绑定域名"></a>1、绑定域名</h2><p>需绑定两个子域名，一个用于绑定服务，一个用于回调监控</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216143159839-370647279.png" alt="image-20231216143146095"></p>
<h2 id="2、设置反向代理"><a href="#2、设置反向代理" class="headerlink" title="2、设置反向代理"></a>2、设置反向代理</h2><p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216141820281-1686465890.png" alt="image-20231216141805832"></p>
<h2 id="3、GitHub上创建OAuth-Apps"><a href="#3、GitHub上创建OAuth-Apps" class="headerlink" title="3、GitHub上创建OAuth Apps"></a>3、GitHub上创建OAuth Apps</h2><p>获取链接：<a target="_blank" rel="noopener" href="https://github.com/settings/developers">https://github.com/settings/developers</a></p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216140631768-437256427.png" alt="image-20231216140618156"></p>
<p>填写名称、域名及回调地址，回调地址格式； <code> 域名/oauth2/callback</code></p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216140844960-141266564.png" alt="image-20231216140831412"></p>
<p>创建成功后可以获得ClientId,再生成一个密钥</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216141134572-1931302926.png" alt="image-20231216141120604"></p>
<h2 id="4、执行一键安装脚本"><a href="#4、执行一键安装脚本" class="headerlink" title="4、执行一键安装脚本"></a>4、执行一键安装脚本</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh &amp;&amp; <span class="built_in">chmod</span> +x nezha.sh</span><br><span class="line">sudo ./nezha.sh </span><br></pre></td></tr></table></figure>

<p>选择安装方式，选择1</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216140125965-2109869836.png" alt="image-20231216140122945"></p>
<p>继续输入1，选择安装面板端</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216141300926-561761202.png" alt="image-20231216141257445"></p>
<p>选择授权提供商，输入<code>github</code>,输入刚才生成的<code>ClientId</code>和 <code>ClientSecret</code>,然后输入github用户名</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216141523093-1524323570.png" alt="image-20231216141508884"></p>
<p>站点名称可随意，选择自己需要开放的端口，注意开放防火墙</p>
<p>docker部署成功后即可通过ip或者域名进行访问面板</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216150434578-229094664.png" alt="image-20231216150421092"></p>
<h2 id="5、绑定账户与服务"><a href="#5、绑定账户与服务" class="headerlink" title="5、绑定账户与服务"></a>5、绑定账户与服务</h2><p>点击登录，获取github授权</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216142159287-508835952.png" alt="image-20231216142145902"></p>
<p>登录之后，可以先改一下主题，并填写<strong>未接入CDN的面板服务器域名&#x2F;IP</strong>，用第二个callback子域名</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216143040137-1266256790.png" alt="image-20231216143036638"></p>
<p>设置好后新增服务器</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216143334680-2136415446.png" alt="image-20231216143319113"></p>
<p>填写服务器名称及分组</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216143525720-339187418.png" alt="image-20231216143512726"></p>
<p>添加后，复制一键安装脚本</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216143607779-1412986541.png" alt="image-20231216143554375"></p>
<p>执行一键安装脚本</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216143937520-1255708221.png" alt="image-20231216143922581"></p>
<p>重新访问域名即可查看VPS运行状态</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216142214694-1200337450.png" alt="image-20231216142200930"></p>
<p>服务 &#x3D;&gt; 新增服务</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216145646907-1665160473.png" alt="image-20231216145640497"></p>
<p>可以监控各站点服务状态</p>
<p><img src="https://img2023.cnblogs.com/blog/2233039/202312/2233039-20231216145749368-1383696373.png" alt="image-20231216145735552"></p>
 
      <!-- reward -->
      
    </div>
    

    <!-- copyright -->
    
    <footer class="article-footer">
       
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Docker/" rel="tag">Docker</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E9%9D%A2%E6%9D%BF/" rel="tag">面板</a></li></ul>

    </footer>
  </div>

    
 
   
  
</article>

    
  </article>
  

  
  <nav class="page-nav">
    
    <span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</a><span class="space">&hellip;</span><a class="page-number" href="/page/8/">8</a><a class="extend next" rel="next" href="/page/2/">下一页</a>
  </nav>
  
</section>
</div>

      <footer class="footer">
  <div class="outer">
    <ul>
      <li>
        Copyrights &copy;
        2023
        <i class="ri-heart-fill heart_icon"></i> Shiguang
      </li>
    </ul>
    <ul>
      <li>
        
      </li>
    </ul>
    <ul>
      <li>
        
        
        <span>
  <span><i class="ri-user-3-fill"></i>Visitors:<span id="busuanzi_value_site_uv"></span></span>
  <span class="division">|</span>
  <span><i class="ri-eye-fill"></i>Views:<span id="busuanzi_value_page_pv"></span></span>
</span>
        
      </li>
    </ul>
    <ul>
      
    </ul>
    <ul>
      
    </ul>
    <ul>
      <li>
        <!-- cnzz统计 -->
        
        <script type="text/javascript" src='https://s9.cnzz.com/z_stat.php?id=1278069914&amp;web_id=1278069914'></script>
        
      </li>
    </ul>
  </div>
</footer>    
    </main>
    <div class="float_btns">
      <div class="totop" id="totop">
  <i class="ri-arrow-up-line"></i>
</div>

<div class="todark" id="todark">
  <i class="ri-moon-line"></i>
</div>

    </div>
    <aside class="sidebar on">
      <button class="navbar-toggle"></button>
<nav class="navbar">
  
  <div class="logo">
    <a href="/"><img src="/images/ayer-side.svg" alt="時光"></a>
  </div>
  
  <ul class="nav nav-main">
    
    <li class="nav-item">
      <a class="nav-item-link" href="/">主页</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/archives">归档</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/categories">分类</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/tags">标签</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/friends">友链</a>
    </li>
    
  </ul>
</nav>
<nav class="navbar navbar-bottom">
  <ul class="nav">
    <li class="nav-item">
      
      <a class="nav-item-link nav-item-search"  title="Search">
        <i class="ri-search-line"></i>
      </a>
      
      
      <a class="nav-item-link" target="_blank" href="/atom.xml" title="RSS Feed">
        <i class="ri-rss-line"></i>
      </a>
      
    </li>
  </ul>
</nav>
<div class="search-form-wrap">
  <div class="local-search local-search-plugin">
  <input type="search" id="local-search-input" class="local-search-input" placeholder="Search...">
  <div id="local-search-result" class="local-search-result"></div>
</div>
</div>
    </aside>
    <div id="mask"></div>

<!-- #reward -->
<div id="reward">
  <span class="close"><i class="ri-close-line"></i></span>
  <p class="reward-p"><i class="ri-cup-line"></i>请我喝杯咖啡吧~</p>
  <div class="reward-box">
    
    <div class="reward-item">
      <img class="reward-img" src="/images/alipay.jpg">
      <span class="reward-type">支付宝</span>
    </div>
    
    
    <div class="reward-item">
      <img class="reward-img" src="/images/wechat.jpg">
      <span class="reward-type">微信</span>
    </div>
    
  </div>
</div>
    
<script src="/js/jquery-3.6.0.min.js"></script>
 
<script src="/js/lazyload.min.js"></script>

<!-- Tocbot -->

<script src="https://cdn.staticfile.org/jquery-modal/0.9.2/jquery.modal.min.js"></script>
<link
  rel="stylesheet"
  href="https://cdn.staticfile.org/jquery-modal/0.9.2/jquery.modal.min.css"
/>
<script src="https://cdn.staticfile.org/justifiedGallery/3.8.1/js/jquery.justifiedGallery.min.js"></script>

<script src="/dist/main.js"></script>

<!-- ImageViewer -->
 <!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">

        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                <!--  Controls are self-explanatory. Order can be changed. -->

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                        <div class="pswp__preloader__cut">
                            <div class="pswp__preloader__donut"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div>
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div>

<link rel="stylesheet" href="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.staticfile.org/photoswipe/4.1.3/default-skin/default-skin.min.css">
<script src="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe.min.js"></script>
<script src="https://cdn.staticfile.org/photoswipe/4.1.3/photoswipe-ui-default.min.js"></script>

<script>
    function viewer_init() {
        let pswpElement = document.querySelectorAll('.pswp')[0];
        let $imgArr = document.querySelectorAll(('.article-entry img:not(.reward-img)'))

        $imgArr.forEach(($em, i) => {
            $em.onclick = () => {
                // slider展开状态
                // todo: 这样不好，后面改成状态
                if (document.querySelector('.left-col.show')) return
                let items = []
                $imgArr.forEach(($em2, i2) => {
                    let img = $em2.getAttribute('data-idx', i2)
                    let src = $em2.getAttribute('data-target') || $em2.getAttribute('src')
                    let title = $em2.getAttribute('alt')
                    // 获得原图尺寸
                    const image = new Image()
                    image.src = src
                    items.push({
                        src: src,
                        w: image.width || $em2.width,
                        h: image.height || $em2.height,
                        title: title
                    })
                })
                var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {
                    index: parseInt(i)
                });
                gallery.init()
            }
        })
    }
    viewer_init()
</script> 
<!-- MathJax -->

<!-- Katex -->

<!-- busuanzi  -->
 
<script src="/js/busuanzi-2.3.pure.min.js"></script>
 
<!-- ClickLove -->

<!-- ClickBoom1 -->

<!-- ClickBoom2 -->

<!-- CodeCopy -->
 
<link rel="stylesheet" href="/css/clipboard.css">
 <script src="https://cdn.staticfile.org/clipboard.js/2.0.10/clipboard.min.js"></script>
<script>
  function wait(callback, seconds) {
    var timelag = null;
    timelag = window.setTimeout(callback, seconds);
  }
  !function (e, t, a) {
    var initCopyCode = function(){
      var copyHtml = '';
      copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
      copyHtml += '<i class="ri-file-copy-2-line"></i><span>COPY</span>';
      copyHtml += '</button>';
      $(".highlight .code pre").before(copyHtml);
      $(".article pre code").before(copyHtml);
      var clipboard = new ClipboardJS('.btn-copy', {
        target: function(trigger) {
          return trigger.nextElementSibling;
        }
      });
      clipboard.on('success', function(e) {
        let $btn = $(e.trigger);
        $btn.addClass('copied');
        let $icon = $($btn.find('i'));
        $icon.removeClass('ri-file-copy-2-line');
        $icon.addClass('ri-checkbox-circle-line');
        let $span = $($btn.find('span'));
        $span[0].innerText = 'COPIED';
        
        wait(function () { // 等待两秒钟后恢复
          $icon.removeClass('ri-checkbox-circle-line');
          $icon.addClass('ri-file-copy-2-line');
          $span[0].innerText = 'COPY';
        }, 2000);
      });
      clipboard.on('error', function(e) {
        e.clearSelection();
        let $btn = $(e.trigger);
        $btn.addClass('copy-failed');
        let $icon = $($btn.find('i'));
        $icon.removeClass('ri-file-copy-2-line');
        $icon.addClass('ri-time-line');
        let $span = $($btn.find('span'));
        $span[0].innerText = 'COPY FAILED';
        
        wait(function () { // 等待两秒钟后恢复
          $icon.removeClass('ri-time-line');
          $icon.addClass('ri-file-copy-2-line');
          $span[0].innerText = 'COPY';
        }, 2000);
      });
    }
    initCopyCode();
  }(window, document);
</script>
 
<!-- CanvasBackground -->

<script>
  if (window.mermaid) {
    mermaid.initialize({ theme: "forest" });
  }
</script>


    
    

  </div>
</body>

</html>